package com.lagou.edu.annotation;

import java.lang.annotation.*;

/**
 * @interface
 * 是java中用于声明注解类的关键字.使用该注解表示将自动继承
 * @Retention:
 * 该注解用于定义注解保留策略,即定义的注解类在什么时候存在(源码阶段 or 编译后 or 运行阶段).
 * @Target
 * 该注解用于定义注解的作用目标, 即注解可以用在什么地方, 比如是用于方法上还是用于字段上,
 * 该注解接受以下参数:
 * @Target(ElementType.TYPE) 用于接口(注解本质上也是接口), 类, 枚举
 * @Target(ElementType.FIELD) 用于字段, 枚举常量
 * @Target(ElementType.METHOD) 用于方法
 * @Target(ElementType.PARAMETER) 用于方法参数
 * @Target(ElementType.CONSTRUCTOR) 用于构造参数
 * @Target(ElementType.LOCAL_VARIABLE) 用于局部变量
 * @Target(ElementType.ANNOTATION_TYPE) 用于注解
 * @Target(ElementType.PACKAGE) 用于包
 * @Inherited
 * 默认情况下, 我们自定义的注解用在父类上不会被子类所继承.如果想让子类也继承父类的注解,
 * 即注解在子类也生效, 需要在自定义注解时设置@Inherited.一般情况下该注解用的比较少.
 * @Documented
 * 该注解用于描述其它类型的annotation应该被javadoc文档化, 出现在api doc中.
 * 比如使用该注解的@Target会出出现在api说明中.
 *
 * 链接：https://www.jianshu.com/p/f85e5212be55
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Transactional{
    String value() default "TransactionManager";
}